# =============================================
# 圆计算函数封装版 - 模块化设计
# =============================================
import math

def calculate_circle(radius):
    """
    计算圆的周长和面积

    参数:
        radius (float): 圆的半径（正数）

    返回:
        tuple: (周长, 面积)

    异常:
        当radius<=0时会抛出ValueError
    """
    # 我们可以使用raise语句自己触发异常
    if radius <= 0:
        raise ValueError("半径必须是正数")
        # 触发异常后，后面的代码就不会再执行

    circumference = 2 * math.pi * radius
    area = math.pi * (radius ** 2)
    return circumference, area

def get_circle_info(unit="厘米", decimal_places=2):
    """
    交互式获取半径并输出计算结果

    参数:
        unit (str): 测量单位，默认为"厘米"
        decimal_places (int): 结果保留小数位数，默认为2
    """
    try:
        # 获取用户输入
        radius = float(input(f"请输入圆的半径（单位：{unit}）: "))

        # 调用计算函数
        circ, area = calculate_circle(radius)

        # 格式化输出
        print(f"\n当半径 = {radius}{unit}时：")
        print(f"▷ 周长 = {circ:.{decimal_places}f} {unit}")
        print(f"▷ 面积 = {area:.{decimal_places}f} 平方{unit}")

    except ValueError as e:
        print(f"输入错误：{e}")

def main():
    """主程序入口"""
    print("=== 圆计算器 ===")
    get_circle_info()  # 使用默认参数

    # 示例：使用不同单位和精度
    # get_circle_info(unit="米", decimal_places=3)

if __name__ == "__main__":
    main()

# =============================================
# 函数设计说明：
# 1. calculate_circle() 函数
#    - 纯粹数学计算，无输入输出操作
#    - 参数验证：确保半径为正数
#    - 返回元组数据，便于其他代码复用
#
# 2. get_circle_info() 函数
#    - 处理用户交互逻辑
#    - 参数化单位和小数位数，提高灵活性
#    - 异常处理基础版本
#
# 3. main() 函数
#    - 程序入口，控制流程
#    - 演示如何调用不同参数版本
# =============================================

# 扩展建议：
# 1. 添加更多单位换算功能（如自动转换厘米到米）
# 2. 增加图形绘制功能（使用matplotlib）
# 3. 添加历史记录保存/读取功能
# 4. 支持批量计算（从文件读取多个半径值）